#ifndef __COMPLEJO__
#define __COMPLEJO__
#include "../float/float.h"

using namespace std;

class Complex{

 private: 			
	Float real;
	Float imaginario;

 public:
 
 	/**
 	 * Constructores
 	 */
        Complex();
	Complex(const Float&, const Float&);
	Complex(const float, const float);
	
	/**
	 *operadores
	 */
	Complex& suma(const Complex&); // a este complejo this le sumo el del parámetro y también resta 
	Complex& producto(const Complex&);
	Complex& producto(const Float&);
        /** Sería el módulo | |  al cuadrado (para evitar hacer raíz sobre el infloat)*/
	Float moduloModulo() const;
	void cuadrado();
	friend Complex operator+(const Complex&, const Complex&); 
	friend Complex operator-(const Complex&, const Complex&); 
	friend Complex operator*(const Complex&, const Complex&); 
	friend Complex operator*(const Float&, const Complex&);
	/**
	 * getters
	 */
	Float Re() const; // proyector de la componente real
	Float Im() const; // id. de la componenete imaginaria
        string mostrar() const;
	/**
	 * setters
	 */
	Complex& setRe(Float);
	Complex& setIm(Float);

	/**
	 * comparaciones y asignacion
	 */
	bool operator==(const Complex&) const; 
	bool operator!=(const Complex&) const;	
};

ostream & operator<<(ostream & out, const Complex& comp);

#endif /** __COMPLEJO__ */

